import pyautogui
import time
import keyboard
from PIL import Image
import os
import subprocess

class WeChatAutomation:
    def __init__(self):
        # 设置安全暂停和故障保护
        pyautogui.PAUSE = 1
        pyautogui.FAILSAFE = True
        
    def locate_wechat_input(self):
        """
        定位微信输入框
        返回输入框的中心坐标
        """
        print("正在定位微信输入框...")
        
        # 方法1: 使用图像识别定位输入框（需要先截图输入框区域作为模板）
        try:
            # 如果你有输入框的模板图片，可以使用这个方式
            # input_box_location = pyautogui.locateOnScreen('wechat_input_box.png', confidence=0.8)
            # if input_box_location:
            #     return pyautogui.center(input_box_location)
            pass
        except:
            pass
        
        # 方法2: 手动定位（推荐初次使用）
        print("请将鼠标移动到微信输入框上，5秒内按Ctrl+C完成定位...")
        try:
            time.sleep(5)
            x, y = pyautogui.position()
            print(f"定位到输入框坐标: ({x}, {y})")
            return (x, y)
        except KeyboardInterrupt:
            x, y = pyautogui.position()
            print(f"定位到输入框坐标: ({x}, {y})")
            return (x, y)
    
    def click_input_box(self, coordinates):
        """
        点击输入框
        """
        print(f"点击输入框位置: {coordinates}")
        pyautogui.click(coordinates)
        time.sleep(1)  # 等待输入框激活
    
    def input_text(self, text):
        """
        输入文本
        """
        print(f"输入文本: {text}")
        pyautogui.write(text, interval=0.1)
        time.sleep(1)
    
    def scroll_down(self, pixels=500, duration=1.0):
        """
        模拟鼠标滚动
        """
        print(f"向下滚动 {pixels} 像素")
        pyautogui.scroll(-pixels)  # 负值表示向下滚动
        time.sleep(duration)
    
    def take_screenshot(self, filename_prefix="wechat_screenshot"):
        """
        截取屏幕截图并保存
        """
        # 创建截图目录
        if not os.path.exists("screenshots"):
            os.makedirs("screenshots")
        
        # 生成带时间戳的文件名
        timestamp = time.strftime("%Y%m%d_%H%M%S")
        filename = f"screenshots/{filename_prefix}_{timestamp}.png"
        
        # 截取全屏
        screenshot = pyautogui.screenshot()
        screenshot.save(filename)
        print(f"截图已保存: {filename}")
        
        return filename, screenshot
    
    def open_wechat(self):
        """
        打开微信（如果还没打开）
        """
        try:
            # Windows系统
            subprocess.Popen(['C:\\Program Files\\Tencent\\WeChat\\WeChat.exe'])
            print("正在启动微信...")
            time.sleep(5)  # 等待微信启动
        except:
            print("请确保微信已经打开并处于前台")
    
    def run_automation(self):
        """
        执行完整的自动化流程
        """
        print("开始微信自动化操作...")
        
        # 确保微信在前台
        print("请确保微信窗口处于前台状态")
        time.sleep(2)
        
        # 定位并点击输入框
        input_coords = self.locate_wechat_input()
        self.click_input_box(input_coords)
        
        # 第一次截图（输入前）
        screenshot1, _ = self.take_screenshot("before_input")
        
        # 输入文本
        self.input_text("999感冒灵999颗粒")
        
        # 第二次截图（输入后）
        screenshot2, _ = self.take_screenshot("after_input")
        
        # 等待一下
        time.sleep(2)
        
        # 向下滚动
        self.scroll_down(300, 0.5)
        
        # 第三次截图（第一次滚动后）
        screenshot3, _ = self.take_screenshot("after_scroll_1")
        
        # 再次向下滚动
        self.scroll_down(400, 0.5)
        
        # 第四次截图（第二次滚动后）
        screenshot4, screenshot_img = self.take_screenshot("after_scroll_2")
        
        print("自动化操作完成！")
        print(f"截图文件: {screenshot1}, {screenshot2}, {screenshot3}, {screenshot4}")
        
        return screenshot_img
    
    def emergency_stop(self):
        """
        紧急停止函数（将鼠标移动到屏幕左上角可触发停止）
        """
        print("程序运行中，将鼠标移动到屏幕左上角可紧急停止")

# 使用示例
if __name__ == "__main__":
    # 安装所需库
    # pip install pyautogui pillow keyboard
    
    wechat_bot = WeChatAutomation()
    
    print("微信自动化脚本")
    print("=" * 50)
    print("功能说明:")
    print("1. 定位微信输入框")
    print("2. 点击输入框")
    print("3. 输入'999感冒灵999颗粒'")
    print("4. 多次截图")
    print("5. 模拟滚动")
    print("=" * 50)
    
    try:
        # 执行自动化
        final_screenshot = wechat_bot.run_automation()
        
        # 你可以在这里添加OCR处理代码
        # 比如使用PaddleOCR处理final_screenshot
        
    except Exception as e:
        print(f"程序执行出错: {e}")
    finally:
        print("程序结束")